/**
 * 
 */
package net.sisgac.despacho_mercaderia.model.dao.jpa;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.NoResultException;
import javax.persistence.Persistence;
import javax.persistence.Query;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import net.sisgac.despacho_mercaderia.model.OrdenServicio;
import net.sisgac.despacho_mercaderia.model.Transportista;
import net.sisgac.despacho_mercaderia.model.dao.OrdenServicioDAO;

/**
 * @author Luis Yarleque
 *
 */
@SuppressWarnings("unchecked")
public class JPAOrdenServicioDAO implements OrdenServicioDAO{

	private EntityManager em;
	private Log log = LogFactory.getLog(getClass());

	
	public JPAOrdenServicioDAO(EntityManager em){
		this.em=em;
	}
	

	
	@Override
	public OrdenServicio findBlyId(int id) {
		return em.find(OrdenServicio.class, id);
	}
	@Override
	public List<OrdenServicio>  find(OrdenServicio o){
		StringBuilder sql =new StringBuilder();
		sql.append("Select o From OrdenServicio o Where ");
		List<String> criteria = new ArrayList<String>();
		if(o.getIdordenservicio()!=0) criteria.add("o.idordenservicio=:idordenservicio");
		if(o.getFechaordens()!=null) criteria.add("o.fechaordens=:fechaordens");
		if(o.getIddestinatario()!=null) criteria.add("o.iddestinatario=:iddestinatario");
		
		
		if(criteria.size()==0){
			throw new RuntimeException("No existen criterios para la consulta");
		}
		for(int i=0;i<criteria.size();i++){
			if(i>0){ sql.append(" Or ");	}
			sql.append(criteria.get(i));
		}
		Query query=em.createQuery(sql.toString());
		if(o.getIdordenservicio()!=0) query.setParameter("idordenservicio", o.getIdordenservicio());
		if(o.getFechaordens()!=null) query.setParameter("fechaordens", o.getFechaordens());
		if(o.getIddestinatario()!=null) query.setParameter("iddestinatario", o.getIddestinatario());
		
		List<OrdenServicio> ordenServicio=null;
		try{
			ordenServicio=(List<OrdenServicio> )query.getResultList();
		}catch(NoResultException ex){
			log.warn("No hay resultados de la consulta"+ex.getMessage());
		}
		return ordenServicio; 
	}

   public int insert(OrdenServicio ordenSevicioDTO) {
	  try {
			em.getTransaction().begin();
			em.persist(ordenSevicioDTO);
			em.flush();
			em.getTransaction().commit();

		} finally {
			em.close();
			return 1;
		}
	}

}
